<?php
/**
* 2016年12月19日 17:52:32
* author:silenceluo
* email:1095584081@qq.com
* 表单验证
*/
class Form
{

	private static $rules;	//验证规则
	private static $vali_data = null;	//验证数据
	private static $allRules = array('number','required','lt','gt','regular','callback','date');

	/**
	 * 检查规则类型 必须在已经定义的规则内
	 * @param  [type] $rules [description]
	 * @return [type]        [description]
	 */
	public static function checkRules($rules){
		if(in_array($rules, self::$allRules)){
			return true;
		}else{
			return false;
		}
	}
	/**
	 * 设置验证规则
	 * @param [type] $setRules [description]
	 */
	public static function setRules($setRules){
		self::$rules = $setRules;
	}
	/**
	 * 设置验证数据
	 * @param [type] $valiData [description]
	 */
	public static function setValiData($valiData){
		self::$vali_data = $valiData;
	}
	/**
	 * 表单验证
	 * @return [type] [description]
	 */
	public static function validation(){
			
			if(is_array(self::$vali_data)&&is_array(self::$rules)){
				
				foreach (self::$rules as $key => $value) {
					
					if(self::checkRules($value[1])){

						switch ($value[1]) {
							case 'number':	//检查是否为数字
								$check = self::checkNumber($value);
								break;
								
							case 'required':	//检查是否存在
								$check = self::checkRequired($value);
								break;

							case 'regular':		//匹配正则
								$check = self::checkRegular($value);
								break;

							case 'gt':	//检查是否大于要求的数字
								$check = self::checkGt($value);
								break;

							case 'date':	//检查是否为日期
								$check = self::isDate($value);
								break;

						}

						if(!$check){
							return array(
								'code'=>0,
								'msg'=>$value[2],
								);
						}

					}else{
						return array(
							'code'=>0,
							'msg'=>'验证未通过',
							);
					}
				}

				return array(
					'code'=>1,
					'msg'=>'验证通过',
					);

			}else{
				return array(
					'code'=>0,
					'msg'=>'验证未通过',
					);
			}
	}
	/**
	 * 检查是否为数字
	 * @param  [type] $data [description]
	 * @return [type]       [description]
	 */
	public static function checkNumber($value){
		if(isset(self::$vali_data[$value[0]])&&is_numeric(self::$vali_data[$value[0]])){
			return true;
		}else{
			return false;
		}
	}
	/**
	 * 检查是否存在
	 * @param  [type] $data [description]
	 * @return [type]       [description]
	 */
	public static function checkRequired($value){
		if(isset(self::$vali_data[$value[0]])&&trim(self::$vali_data[$value[0]])!=""){
			return true;
		}else{
			return false;
		}
	}
	/**
	 * 检查是否满足正则
	 * @param  [type] $value [description]
	 * @return [type]        [description]
	 */
	public static function checkRegular($value){
		if(isset(self::$vali_data[$value[0]])&&preg_match("".$value[3]."", self::$vali_data[$value[0]])){
			return true;
		}else{
			return false;
		}
	}
	/**
	 * 检查是否大于给定的数字
	 * @param  [type] $value [description]
	 * @return [type]        [description]
	 */
	public static function checkGt($value){
		if(isset(self::$vali_data[$value[0]])&&is_numeric(self::$vali_data[$value[0]])&&(self::$vali_data[$value[0]]>$value[3])){
			return true;
		}else{
			return false;
		}
	}
 	/**
     * 判断日期格式是否合法
     * @param  [type]  $dateString [description]
     * @return boolean             [description]
     */
    public static function isDate( $value ) {
    	if(!isset(self::$vali_data[$value[0]])){
    		return false;
    	}

        return strtotime( date('Y-m-d H:i:s', strtotime(self::$vali_data[$value[0]])) ) === strtotime( self::$vali_data[$value[0]] );
    }
}